package old_func

import (
	"fmt"
	"gorm.io/gorm"
	"gvb_server/global"
	"gvb_server/models"
)

type Option struct {
	models.PageInfo
	Debug bool
	Likes []string // 用于模糊匹配，但是还没有完成
}

func ComList[T any](model T, option Option) (list []T, count int64, err error) {

	DB := global.DB
	if option.Debug {
		DB = global.DB.Session(&gorm.Session{Logger: global.MysqlLog})
	}
	if option.Sort == "" {
		option.Sort = "created_at desc" // 默认按照时间排序
	}
	query := DB.Model(model)

	// 遍历 Likes 字段，使用模糊匹配 Key 的值
	if option.Key != "" && len(option.Likes) > 0 {
		for _, likeField := range option.Likes {
			// 构建模糊查询条件：LIKE %Key%
			query = query.Or(fmt.Sprintf("%s LIKE ?", likeField), "%"+option.Key+"%")
		}
	}
	// 先计算总数，不受分页、排序的影响
	err = query.Count(&count).Error
	if err != nil {
		return nil, 0, err
	}

	// 处理分页
	offset := (option.Page - 1) * option.Limit
	if offset < 0 {
		offset = 0
	}
	if option.Limit == 0 {
		option.Limit = int(count)
	}
	// 查询具体的数据，应用分页和排序
	err = query.Limit(option.Limit).Offset(offset).Order(option.Sort).Find(&list).Error
	count = int64(len(list))
	return list, count, err
}
